/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package polaczenie;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.Connection;
import java.util.Date;
import java.sql.CallableStatement;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.swing.JOptionPane;

import auto.wus.Pacjent;
import auto.wus.Wizyta;
/**
 *
 * @author Cyga
 */
public class polacz {


                Statement stmt = null;
	Connection c = null;
	
	public void laczZBD(){
	 try {
	      Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
	      c = DriverManager.getConnection(
	        "jdbc:oracle:thin:@localhost:1521:orcl","scott", "tiger");
	      System.out.println ("Udało się połączyć z bazą danych...");
	    } catch (ClassNotFoundException e) {
	      System.out.println ("Problem z driverem bazy danych...");
	    } catch (SQLException e) {
	        System.out.println ("Nie można połączyć się z baza danych...");
	    } catch (Exception e) {
	        System.out.println ("Błąd przy połączeniu z bazą danych...");
	    }
	}
      public void wyswietlWizyty(){

	
	    try {
	      Statement st=c.createStatement();
	      ResultSet rs=st.executeQuery("SELECT * FROM wizyty");
	   while (rs.next()) {
                            int id_wizyty= rs.getInt("id_wizyty");
                            Date  data_wizyty = rs.getDate("data_wizyty");
                            long pesel= rs.getLong("PESEL");
                            String nr_dowodu =rs.getString("nr_dowodu");
	     
	         System.out.println("Wizyty: ");
	        System.out.println("pesel: "+pesel+" data "+data_wizyty+" dowod "+nr_dowodu);
            
                  
	      }
              
	      rs.close();
              //c.close();
	    } catch (Exception e) { 
	      System.out.println ("Błąd przy pobieraniu danych...");
	    }
	}
      
       public void wyswietlPacjentow(){

	
	    try {
	      Statement st=c.createStatement();
	      ResultSet rs=st.executeQuery("SELECT * FROM pacjenci");
	      while (rs.next()) {
                            long pesel= rs.getLong("PESEL");
                            String imie =rs.getString("imie");
                            String nazwisko =rs.getString("nazwisko");
                            int tel =rs.getInt("nr_tel");
	     
	         System.out.println("Pacjenci: ");
	        System.out.println("pesel: "+pesel+" imie "+imie+" nazwisko "+nazwisko);
	      }
	      rs.close();
           //   c.close();
	    } catch (Exception e) { 
	      System.out.println ("Błąd przy pobieraniu danych...");
	    }
	}
       
       public void wyswietlDzisiejsze(){

	
	    try {
	      Statement st=c.createStatement();
	      ResultSet rs=st.executeQuery("SELECT * FROM sprawdzenia");
	      while (rs.next()) {
                            long pesel= rs.getLong("PESEL");
                            int id_sprawdzenia= rs.getInt("id_sprawdzenia");
                            String nazwisko =rs.getString("nazwisko");
                            int tel =rs.getInt("nr_tel");
	     
	     System.out.println("dzisiejsze sprawdzenia: ");
	        System.out.println("pesel: "+pesel+" nazwisko "+nazwisko);
	      }
	      rs.close();
              //c.close();
	    } catch (Exception e) { 
	      System.out.println ("Błąd przy pobieraniu danych...");
	    }
	}
       
       public  void dodajPacjenta( long PESEL,String imie,String nazwisko,int tel)
	{
		
    	   try {
		String zapytanie;
		zapytanie = "INSERT INTO pacjenci (PESEL, imie, nazwisko,nr_tel) VALUES ('"+PESEL+"','"+imie+"','"+nazwisko+"','"+tel+"')";
		

		
			stmt = c.createStatement();
	   		stmt.executeUpdate(zapytanie);
	   		

			stmt.close();
		//	c.close();

		} catch(SQLException ex) {
			System.err.println("bład przy wprowadzaniu danych");
		}
	
	}
       
       public  void dodajWizyte( int id, String data, String godzina, String dowod, long pesel)
	{
		
		String zapytanie;
		zapytanie = "INSERT INTO wizyty (id_wizyty, data_wizyty, godzina_wizyty, PESEL, nr_dowodu, zweryfikowany) VALUES ('"+id+"','"+data+"','"+godzina+"','"+pesel+"','"+dowod+"',2)";
		

		try {
			stmt = c.createStatement();
	   		stmt.executeUpdate(zapytanie);
	   		

			stmt.close();
		//	c.close();

		} catch(SQLException ex) {
			System.err.println("bład przy wprowadzaniu danych");
		}
	
	}
       
       public Integer id_wizyty_max(){
    	   int id = 0;
    	   
    	   try {
    		      Statement st=c.createStatement();
    		      ResultSet rs=st.executeQuery("SELECT max(id_wizyty) FROM wizyty");
    		      while(rs.next()){
    		    	  id=rs.getInt(1);
    		      }
    		      rs.close();
    	   }
    		      catch (Exception e) { 
    			      System.out.println ("Błąd przy pobieraniu danych...");
    			    }
    	   id+=1;
    	   System.out.println("id id id" + id);
    	   return id;
       }
       
       public  void dodajSprawdzenie(String pesel){
	
		Integer id_max=0 ;
		    try {
	      Statement st=c.createStatement();
	      ResultSet rs=st.executeQuery("SELECT max(id_sprawdzenia) FROM sprawdzenia");
	      while (rs.next()) {
                          id_max=rs.getInt(1);
	
	      }
	      rs.close();
              id_max= id_max +1 ;
              System.out.println ("max: "+id_max);
              //c.close();
	    } catch (Exception e) { 
	      System.out.println ("Błąd przy pobieraniu danych...");
	    }
		String zapytanie;
		zapytanie = "INSERT INTO sprawdzenia (id_sprawdzenia,  PESEL) VALUES ('"+id_max+"','"+pesel+"')";
		

		try {
			stmt = c.createStatement();
	   		stmt.executeUpdate(zapytanie);
	   		

			stmt.close();
		//	c.close();

		} catch(SQLException ex) {
			System.err.println("bład przy wprowadzaniu danych");
		}
	
	}
       public ArrayList<Integer> pobierzPesele(){
        ArrayList<Integer> pesele = new ArrayList<>();
	    
	    try {
	      Statement st=c.createStatement();
	      ResultSet rs=st.executeQuery("SELECT PESEL FROM sprawdzenia ");
	      while (rs.next()) {
	        int PESEL = rs.getInt("PESEL");
	       pesele.add(PESEL);
	      }
	      rs.close();
	    } catch (Exception e) { 
	      System.out.println ("Błąd przy pobieraniu danych...");
	    }
        return pesele;
	}
   public  void wyczyscSprawdzenie()
	{
		
		
		String zapytanie;
		zapytanie = "TRUNCATE TABLE  sprawdzenia";
		

		try {
			stmt = c.createStatement();
	   		stmt.executeUpdate(zapytanie);
	   		

			stmt.close();
		//	c.close();

		} catch(SQLException ex) {
			System.err.println("bład przy wprowadzaniu danych");
		}
	
	}
   
     public Pacjent pobierzPacjenta(String pesel){
     Pacjent p = new Pacjent();
	
	    try {
	      Statement st=c.createStatement();
	      ResultSet rs=st.executeQuery("SELECT * FROM pacjenci where PESEL='"+pesel+"'");
	      while (rs.next()) {
                            
                            String imie =rs.getString("imie");
                            String nazwisko =rs.getString("nazwisko");
                            String tel =rs.getString("nr_tel");
	     p.setImie(imie);
             p.setNazwisko(nazwisko);
             p.setTelefon(tel);
             p.setPesel(pesel);
	         System.out.println("Pacjenci: ");
	        System.out.println("pesel: "+pesel+" imie "+imie+" nazwisko "+nazwisko);
	      }
	      rs.close();
           //   c.close();
	    } catch (Exception e) { 
	      System.out.println ("Błąd przy pobieraniu danych...");
	    }
        return p;
	}
     
     public ArrayList<String> peseleZDzisiejszychWizyt(){
    	 ArrayList<String>  pesele = new ArrayList<>();
    	 Date d = new Date();
    	 java.util.Date dz = d;
    	 java.text.SimpleDateFormat sdf = 
    		     new java.text.SimpleDateFormat("yyyy-MM-dd");

    		String datas = sdf.format(dz);
    		
    		try {
    		      Statement st=c.createStatement();
    		      ResultSet rs=st.executeQuery("SELECT pesel FROM wizyty where data_wizyty='"+datas+"'");
    		   while (rs.next()) {
    			   String pesel= rs.getString("PESEL");
    			   pesele.add(pesel);
    		   }
    			   rs.close();
    	              //c.close();
    		    } catch (Exception e) { 
    		      System.out.println ("Błąd przy pobieraniu danych...");
    		    }
    	        return pesele;
     }
    		   
      public ArrayList<Wizyta> pobierzDzisiejszeWizyty(){
          ArrayList<Wizyta> wizyty = new ArrayList();
          Wizyta w = new Wizyta();
          Date d = new Date();
          java.util.Date dz = d;

java.text.SimpleDateFormat sdf = 
     new java.text.SimpleDateFormat("yyyy-MM-dd");

String datas = sdf.format(dz);

	
	    try {
	      Statement st=c.createStatement();
	      ResultSet rs=st.executeQuery("SELECT * FROM wizyty w,pacjenci p where data_wizyty='"+datas+"' and w.PESEL=p.PESEL");
	   while (rs.next()) {
                            int id_wizyty= rs.getInt("id_wizyty");
                            Date  data_wizyty = rs.getDate("data_wizyty");
                            String pesel= rs.getString("PESEL");
                            String nr_dowodu =rs.getString("nr_dowodu");
                            String imie =rs.getString("imie");
                            String nazwisko =rs.getString("nazwisko");
                            String godzina_wizyty = rs.getString("godzina_wizyty");
                            Integer zweryfikowany = rs.getInt("zweryfikowany");
                          
	     w.setData_wizyty(data_wizyty);
             w.setId_wizyty(id_wizyty);
             w.setPesel(pesel);
             w.setNr_dowodu(nr_dowodu);
             w.setImie(imie);
             w.setNazwisko(nazwisko);
             w.setGodzina_wizyty(godzina_wizyty);
             w.setZweryfikowany(zweryfikowany);
	         System.out.println("Wizyty: ");
	        System.out.println("pesel: "+pesel+" data "+data_wizyty+" dowod "+nr_dowodu);
            wizyty.add(w);
            w = new Wizyta();
                  
	      }
              
	      rs.close();
              //c.close();
	    } catch (Exception e) { 
	      System.out.println ("Błąd przy pobieraniu danych...");
	    }
            
        return wizyty;
	}
      
       public boolean sprawdzPesel(String pesel){

	boolean ma = false;
	    try {
	      Statement st=c.createStatement();
	      ResultSet rs=st.executeQuery("SELECT * FROM sprawdzenia where PESEL='"+pesel+"'");
	      if (rs.next()) {                    
                  
              ma=true;
	      }
              else {
              ma=false;
              }
	      rs.close();
              //c.close();
	    } catch (Exception e) { 
	      System.out.println ("Błąd przy pobieraniu danych...");
	    }
        return ma;
	}
         public ArrayList<String> pobierzDzisiejsze(){
ArrayList<String>  pesele = new ArrayList<>();
	
	    try {
	      Statement st=c.createStatement();
	      ResultSet rs=st.executeQuery("SELECT distinct * FROM sprawdzenia");
	      while (rs.next()) {
                            String pesel= rs.getString("PESEL");
                     
	     
	     //System.out.println("dzisiejsze sprawdzenia: ");
	     pesele.add(pesel);
	      }
	      rs.close();
              //c.close();
	    } catch (Exception e) { 
	      System.out.println ("Błąd przy pobieraniu danych...");
	    }
        return pesele;
	}
         
         
         
         public ArrayList<Wizyta> pobierzWizytyPoPeselu(ArrayList<String> pesele){
          ArrayList<Wizyta> wizyty = new ArrayList();
          Wizyta w = new Wizyta();
          Date d = new Date();
          java.util.Date dz = d;

java.text.SimpleDateFormat sdf = 
     new java.text.SimpleDateFormat("yyyy-MM-dd");

String datas = sdf.format(dz);

	
	    try {
	      Statement st=c.createStatement();
              for(int i =0 ; i<pesele.size();i++){
	      ResultSet rs=st.executeQuery("SELECT distinct * FROM wizyty w,pacjenci p where w.PESEL='"+pesele.get(i) +"' and w.PESEL=p.PESEL AND (w.zweryfikowany='2' OR w.zweryfikowany='3' OR w.zweryfikowany='4')");
	   while (rs.next()) {
                            int id_wizyty= rs.getInt("id_wizyty");
                            Date  data_wizyty = rs.getDate("data_wizyty");
                            String pesel= rs.getString("PESEL");
                            String nr_dowodu =rs.getString("nr_dowodu");
                            String imie =rs.getString("imie");
                            String nazwisko =rs.getString("nazwisko");
                            String godzina_wizyty = rs.getString("godzina_wizyty");
                            Integer zweryfikowany = rs.getInt("zweryfikowany");
                          
	     w.setData_wizyty(data_wizyty);
             w.setId_wizyty(id_wizyty);
             w.setPesel(pesel);
             w.setNr_dowodu(nr_dowodu);
             w.setImie(imie);
             w.setNazwisko(nazwisko);
             w.setGodzina_wizyty(godzina_wizyty);
             w.setZweryfikowany(zweryfikowany);
	         System.out.println("Wizyty: ");
	        System.out.println("pesel: "+pesel+" data "+data_wizyty+" dowod "+nr_dowodu);
            wizyty.add(w);
            w = new Wizyta();
                  
	      }
              
	      rs.close();
              //c.close();
	    }
            }catch (Exception e) { 
	      System.out.println ("Błąd przy pobieraniu danych...");
	    }
            
        return wizyty;
	}
         public void zmienWartoscWeryfikacjiDzisiejszeWizyty(ArrayList<String> pesele, ArrayList<Integer> doWeryfikacji){

             Date d = new Date();
             java.util.Date dz = d;

    java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");
	String datas = sdf.format(dz);
	
        	 try {
       	      Statement st=c.createStatement();
       	      int wiersze = 0;
                     for(int i =0 ; i<pesele.size();i++){
       	      st.executeUpdate("UPDATE wizyty set zweryfikowany="+doWeryfikacji.get(i)+" WHERE pesel='"+pesele.get(i)+"' AND data_wizyty='"+datas+"'");
                     }
                     System.out.println("Ilosc zmodyifowanych wierszy"+wiersze);
        	 }
                     catch (Exception e) { 
               	      System.out.println ("Błąd przy wprowadzaniu zmian danych...");
               	    }
                     }

         public void zmienWartoscWeryfikacjiRezerwacje(ArrayList<String> pesele, ArrayList<Integer> doWeryfikacji){
        	 try {
       	      Statement st=c.createStatement();
       	      int wiersze = 0;
                     for(int i =0 ; i<pesele.size();i++){
       	      st.executeUpdate("UPDATE wizyty set zweryfikowany="+doWeryfikacji.get(i)+" WHERE pesel='"+pesele.get(i)+"' AND zweryfikowany=2");
                     }
                     System.out.println("Ilosc zmodyifowanych wierszy"+wiersze);
        	 }
                     catch (Exception e) { 
               	      System.out.println ("Błąd przy wprowadzaniu zmian danych...");
               	    }
                     }
         
         public void zaktualizujZweryfikowania(){
        	 try {
       	      Statement st=c.createStatement();
       	      int wiersze = 0;
       	      st.executeUpdate("UPDATE wizyty set zweryfikowany=1 WHERE zweryfikowany=4");
       	      st.execute("UPDATE wizyty set zweryfikowany=0 WHERE zweryfikowany=3");
                    
                     System.out.println("Ilosc zmodyifowanych wierszy"+wiersze);
        	 }
                     catch (Exception e) { 
               	      System.out.println ("Błąd przy wprowadzaniu zmian danych...");
               	    }
                     }
         public void export_XML_aktualny_raport(){
     		try{
     			 CallableStatement a = c.prepareCall("{ call export_XML_aktualny_raport()}");

     			 a.execute();
     			 JOptionPane.showMessageDialog(null, "Wygenerowano raport");
     			 
     		 }catch(Exception wyjatek){  
     		  		System.out.println("Błąd eksportu"); 
     		  }
     	}
         
         public void export_XML_podsumowanie(){
      		try{
      			 CallableStatement a = c.prepareCall("{ call export_XML_podsumowanie()}");

      			 a.execute();
      			 JOptionPane.showMessageDialog(null, "Wygenerowano raport");
      			 
      		 }catch(Exception wyjatek){  
      		  		System.out.println("Błąd eksportu"); 
      		  }
      	}
         
         public void export_XML_podsumowanie_m(int miesiac){
       		try{
       			 CallableStatement a = c.prepareCall("{ call export_XML_podsumowanie_m("+miesiac+")}");

       			 a.execute();
       			 JOptionPane.showMessageDialog(null, "Wygenerowano raport");
       			 
       		 }catch(Exception wyjatek){  
       		  		System.out.println("Błąd eksportu"); 
       		  }
       	}
         
       	public void export_XML_podsumowanie_roku(){
       		try{
       			 CallableStatement a = c.prepareCall("{ call export_XML_podsumowanie_roku()}");

       			 a.execute();
       			 JOptionPane.showMessageDialog(null, "Wygenerowano raport");
       			 
       		 }catch(Exception wyjatek){  
       		  		System.out.println("Błąd eksportu"); 
       		  }
       	}
       	//tu dodac plik
       	public void import_XML(String file){
       		try{
       			 CallableStatement a = c.prepareCall("{ call import_XML('"+file+"')}");

       			 a.execute();
       			 JOptionPane.showMessageDialog(null, "Wygenerowano raport");
       			 
       		 }catch(Exception wyjatek){  
       		  		System.out.println("Błąd eksportu"); 
       		  }
       	}
       	
       	public void export_XML_pacjenci(){
       		try{
       			 CallableStatement a = c.prepareCall("{ call export_XML_pacjenci()}");

       			 a.execute();
       			 JOptionPane.showMessageDialog(null, "Wygenerowano raport");
       			 
       		 }catch(Exception wyjatek){  
       		  		System.out.println("Błąd eksportu"); 
       		  }
       	}
       	
       	public void export_XML(){
       		try{
       			 CallableStatement a = c.prepareCall("{ call export_XML()}");

       			 a.execute();
       			 JOptionPane.showMessageDialog(null, "Wygenerowano raport");
       			 
       		 }catch(Exception wyjatek){  
       		  		System.out.println("Błąd eksportu"); 
       		  }
       	}
}
  